﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using WebMassage.Models;
using WebMassage.Helpers;
using System.IO;

namespace WebMassage.Controllers
{
    //iii.	Trang chủ gồm có các thành phần sau:
    //1.	Hình ảnh liên quan đến các dịch vụ của địa điểm Massage.
    //2.	Các tin tức mới
    //3.	Một số hình ảnh về kỹ thuật viên
    //4.	Trang chủ được tạo ra dưới nhiều bố cục để chủ cơ sở lựa chọn.
    //iv.	Trang tin tức thông thường.
    //v.	Trang dịch vụ: liệt kê danh sách các dịch vụ và hình ảnh đi kèm. Đơn giản nhất là 1 trang HTML đầy đủ.
    //vi.	Trang Kỹ Thuật Viên: thể hiện hình ảnh của các kỹ thuật viên. Mỗi hình ảnh có chức năng Zoom lớn. Khi click vào 1 hình nào đó thì dẫn đến các hình ảnh của kỹ thuật viên đó. Dưới mỗi hình của KTV là mã số của KTV đó.
    //vii.	Liên hệ: thông tin về cơ sở, bản đồ vị trí của cơ sở, nhận góp ý từ người dùng.


    [HandleError]
    public class HomeController : Controller
    {
        string uploadPath = AppDomain.CurrentDomain.BaseDirectory + @"\upload\Home\";
        private static int defaultPageSize = 10;
        private string contentId = "ctl00$MainContent$Content";
        public ActionResult Index()
        {
            KTVPicResponsitory ktvPicRes = null;
            NewResponsitory newRes = null;
            PageInfoResponsitory pageInfo = null; 
            try
            {
                ktvPicRes = new KTVPicResponsitory();
                newRes = new NewResponsitory();
                pageInfo = new PageInfoResponsitory();
                HomeViewModel model = new HomeViewModel();

                model.KTVPics = ktvPicRes.GetShowInHome().ToList();
                model.News = newRes.GetNewShowInHome(10).ToList();
                if (!Directory.Exists(uploadPath))
                    Directory.CreateDirectory(uploadPath);

                model.SlidePics = Directory.GetFiles(uploadPath);

                for (int i = 0; i < model.SlidePics.Length; i++)
			    {
                    model.SlidePics[i] = @"/Upload/Home/" +  System.IO.Path.GetFileName(model.SlidePics[i]);
			    }

                return View(model);
            }
            catch (Exception ex)
            {
                ViewData["Message"] = ex.Message;
                return View("../Shared/Error");
            }
            finally
            {
                pageInfo.Dispose();
                newRes.Dispose();
                ktvPicRes.Dispose();
            }
        }

        public ActionResult About()
        {
            PageInfoResponsitory pageInfo = null;
            try
            {
                pageInfo = new PageInfoResponsitory();
                PageInfo p = pageInfo.GetByGroup("Home/About").SingleOrDefault();
                if (p != null)
                {
                    return View(p);
                }
                else
                    return View();
            }
            catch (Exception ex)
            {
                ViewData["Message"] = ex.Message;
                return View("../Shared/Error");
            }
            finally
            {
                pageInfo.Dispose();
            }
        }

        public ActionResult Service()
        {
            PageInfoResponsitory pageInfo = null;
            try
            {
                pageInfo = new PageInfoResponsitory();
                PageInfo p = pageInfo.GetByGroup("Home/Service").SingleOrDefault();
                if (p != null)
                {
                    return View(p);
                }
                else
                    return View();
            }
            catch (Exception ex)
            {
                ViewData["Message"] = ex.Message;
                return View("../Shared/Error");
            }
            finally
            {
                pageInfo.Dispose();
            }
        }

        [Authorize(Roles = "Administrator")]
        public ActionResult Manager(int? page)
        {
            PageInfoResponsitory pageRes = null; 
            try
            {
                pageRes = new PageInfoResponsitory();
                var pages = pageRes.All();

                int pageIndex = page.HasValue ? page.Value - 1 : 0;
                return View(pages.ToPagedList(pageIndex, defaultPageSize));
            }
            catch (Exception ex)
            {
                ViewData["message"] = ex.Message;
                return View("/Shared/Error");
            }
            finally
            {
                if (pageRes != null)
                    pageRes.Dispose();
            }
        }

        [Authorize(Roles = "Administrator")]
        public ActionResult ManagerHome()
        {
            KTVPicResponsitory ktvPicRes = null;
            try
            {
                ktvPicRes = new KTVPicResponsitory();
                HomeViewModel model = new HomeViewModel();

                model.SlidePics = Directory.GetFiles(uploadPath);

                for (int i = 0; i < model.SlidePics.Length; i++)
                {
                    model.SlidePics[i] = @"/Upload/Home/" + System.IO.Path.GetFileName(model.SlidePics[i]);
                }


                model.KTVPics = ktvPicRes.GetShowInHome().ToList();
                int count = model.KTVPics.Count;
                if (count < 8)
                {
                    for (int i = count; i < 8; i++)
                    {
                        KTVPic pic = new KTVPic();
                        pic.PictureUrl = "";
                        model.KTVPics.Add(pic);
                    }
                }              
                
                return View(model);
            }
            catch (Exception ex)
            {
                ViewData["Message"] = ex.Message;
                return View("../Shared/Error");
            }
            finally
            {
               // newRes.Dispose();
                ktvPicRes.Dispose();
            }
        }

        [Authorize(Roles = "Administrator")]
        public ActionResult Create()
        {
            try
            {
                PageInfo pI = new PageInfo();
                return View(pI);
            }
            catch (Exception ex)
            {
                ViewData["message"] = ex.Message;
                return View("/Shared/Error");
            }
        }

        [Authorize(Roles = "Administrator")]
        [ValidateInput(false)]
        public ActionResult Details(int id)
        {
            PageInfoResponsitory pageRes = null;
            try
            {
                pageRes = new PageInfoResponsitory();
                PageInfo pinfo = pageRes.GetById(id);
                if (pinfo != null)
                {
                    return View(pinfo);
                }
                return RedirectToAction("Manager");
            }
            catch (Exception ex)
            {
                ViewData["message"] = ex.Message;
                return View("/Shared/Error");
            }
            finally
            {
                if (pageRes != null)
                    pageRes.Dispose();
            }
        }

        [HttpPost]
        [Authorize(Roles = "Administrator")]
        [ValidateInput(true)]
        public ActionResult Create(FormCollection collection)
        {
            PageInfoResponsitory pageRes = null;
            try
            {
                pageRes = new PageInfoResponsitory();
                PageInfo pI = new PageInfo();
                UpdateModel(pI);
                pI.Body = Request.Form.Get(contentId);
                pageRes.Add(pI);
                pageRes.Save();
                return RedirectToAction("Manager");             
            }
            catch (Exception ex)
            {
                ViewData["message"] = ex.Message;
                return View("/Shared/Error");
            }
            finally
            {
                if (pageRes != null)
                    pageRes.Dispose();
            }
        }

        [Authorize(Roles = "Administrator")]
        [ValidateInput(false)]
        public ActionResult Edit(int id)
        {

            PageInfoResponsitory pageRes = null;
            try
            {
                pageRes = new PageInfoResponsitory();
                PageInfo pinfo = pageRes.GetById(id);
                if (pinfo != null)
                {
                    return View(pinfo);
                }
                return RedirectToAction("Manager");
            }
            catch (Exception ex)
            {
                ViewData["message"] = ex.Message;
                return View("/Shared/Error");
            }
            finally
            {
                if (pageRes != null) 
                    pageRes.Dispose();
            }
        }

        [HttpPost]
        [Authorize(Roles = "Administrator")]
        [ValidateInput(false)]
        public ActionResult Edit(int id, FormCollection collection)
        {
            PageInfoResponsitory pageRes = null;
            try
            {
                pageRes = new PageInfoResponsitory();
                PageInfo pinfo = pageRes.GetById(id);
                if (pinfo != null)
                {
                    UpdateModel(pinfo);
                    pinfo.Body = Request.Form.Get(contentId);
                    pageRes.Save();
                }
                return RedirectToAction("Manager");
            }
            catch (Exception ex)
            {
                ViewData["message"] = ex.Message;
                return View("/Shared/Error");
            }
            finally
            {
                if (pageRes != null)
                    pageRes.Dispose();
            }
        }

        [Authorize(Roles = "Administrator")]
        public ActionResult Delete(int id, int? page)
        {
            PageInfoResponsitory pageRes = null;
            try
            {
                pageRes = new PageInfoResponsitory();
                PageInfo pI = pageRes.GetById(id);
                if (pI != null)
                {
                    pageRes.Delete(pI);
                    pageRes.Save();
                }
                return RedirectToAction("Manager", new { page = page });
            }
            catch (Exception ex)
            {
                ViewData["message"] = ex.Message;
                return View("/Shared/Error");
            }
            finally
            {
                if (pageRes != null)
                    pageRes.Dispose();
            }
        }
        
        [HttpPost]
        [Authorize(Roles = "Administrator")]
        public ActionResult UploadImage()
        {
            try
            {
                foreach (string tagName in Request.Files)
                {
                    if (Request.Files[tagName] == null) continue;
                    HttpPostedFileBase file = Request.Files[tagName];
                    if (file.ContentLength > 0)
                    {
                        if (Path.GetExtension(file.FileName).Length > 0)
                        {
                            string name = Path.GetFileName(file.FileName);
                            file.SaveAs(uploadPath + name);
                        }                        
                    }
                }
                return RedirectToAction("ManagerHome") ;
            }
            catch (Exception ex)
            {
                ViewData["Message"] = ex.Message;
            }
            finally
            {

            }
            return RedirectToAction("ManagerHome");
        }


       
    }
}
